
package net.inteidee.bean.entity;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;




@Entity
public class Utente  {

	
	@Id @GeneratedValue
	protected long id;
	
	protected String email;
	protected String password;
	protected String nome;
	protected String cognome;
	protected String codiceFiscale;
	protected Boolean stato;
	
	@Embedded
	protected MyLogging myLogging = new MyLogging();
	
	@OneToMany(fetch = FetchType.EAGER, mappedBy = "utente" , cascade = CascadeType.ALL)	
	protected Set<UtenteRuolo> utentiRuoli = new HashSet<UtenteRuolo>();

	

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCognome() {
		return cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public String getCodiceFiscale() {
		return codiceFiscale;
	}

	public void setCodiceFiscale(String codiceFiscale) {
		this.codiceFiscale = codiceFiscale;
	}

	public Boolean getStato() {
		return stato;
	}

	public void setStato(Boolean stato) {
		this.stato = stato;
	}

	public MyLogging getMyLogging() {
		return myLogging;
	}

	public void setMyLogging(MyLogging myLogging) {
		this.myLogging = myLogging;
	}

	


	
	public Set<UtenteRuolo> getUtentiRuoli() {
		return utentiRuoli;
	}

	public void setUtentiRuoli(Set<UtenteRuolo> utentiRuoli) {
		this.utentiRuoli = utentiRuoli;
	}

	public void addUtenteRuolo(Utente utente , Ruolo ruolo){
		
		UtenteRuolo utenteRuolo = new UtenteRuolo();
		utenteRuolo.setUtente(utente);
		utenteRuolo.setRuolo(ruolo);
		utentiRuoli.add(utenteRuolo);
		
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((codiceFiscale == null) ? 0 : codiceFiscale.hashCode());
		result = prime * result + ((cognome == null) ? 0 : cognome.hashCode());
		result = prime * result + ((email == null) ? 0 : email.hashCode());
		result = prime * result + (int) (id ^ (id >>> 32));
		result = prime * result
				+ ((myLogging == null) ? 0 : myLogging.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((password == null) ? 0 : password.hashCode());
		result = prime * result + ((stato == null) ? 0 : stato.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Utente other = (Utente) obj;
		if (codiceFiscale == null) {
			if (other.codiceFiscale != null)
				return false;
		} else if (!codiceFiscale.equals(other.codiceFiscale))
			return false;
		if (cognome == null) {
			if (other.cognome != null)
				return false;
		} else if (!cognome.equals(other.cognome))
			return false;
		if (email == null) {
			if (other.email != null)
				return false;
		} else if (!email.equals(other.email))
			return false;
		if (id != other.id)
			return false;
		if (myLogging == null) {
			if (other.myLogging != null)
				return false;
		} else if (!myLogging.equals(other.myLogging))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (password == null) {
			if (other.password != null)
				return false;
		} else if (!password.equals(other.password))
			return false;
		if (stato == null) {
			if (other.stato != null)
				return false;
		} else if (!stato.equals(other.stato))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Utente [id=" + id + ", email=" + email + ", password="
				+ password + ", nome=" + nome + ", cognome=" + cognome
				+ ", codiceFiscale=" + codiceFiscale + ", stato=" + stato
				+ ", myLogging=" + myLogging + "]";
	}

	

	

	
	
}
